package com.crm.server.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;

/**
 * 验证码生成器配置类（基于Kaptcha）
 * 定义验证码的字符规则、图片样式、干扰效果
 */
@Configuration
public class KaptchaConfig {

    @Bean(name = "captchaProducer")
    public DefaultKaptcha getCaptchaProducer() {
        DefaultKaptcha captchaProducer = new DefaultKaptcha();
        Properties properties = new Properties();

        // 1. 验证码基本配置
        properties.setProperty("kaptcha.border", "yes"); // 是否显示边框
        properties.setProperty("kaptcha.border.color", "105,179,90"); // 边框颜色（RGB）
        properties.setProperty("kaptcha.textproducer.font.color", "blue"); // 验证码字符颜色
        properties.setProperty("kaptcha.image.width", "120"); // 图片宽度（像素）
        properties.setProperty("kaptcha.image.height", "40"); // 图片高度（像素）
        properties.setProperty("kaptcha.textproducer.font.size", "32"); // 字符字体大小

        // 2. 验证码字符规则
        properties.setProperty("kaptcha.textproducer.char.length", "4"); // 验证码长度（4位）
        properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); // 字符池（数字+大写字母）
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier"); // 字体样式

        // 3. 干扰效果配置（防止机器识别）
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise"); // 无噪点（或选DefaultNoise添加噪点）
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.WaterRipple"); // 波纹干扰效果
        properties.setProperty("kaptcha.background.impl", "com.google.code.kaptcha.impl.DefaultBackground"); // 背景色渐变（默认白→灰）
        properties.setProperty("kaptcha.background.clear.from", "247,247,247"); // 背景起始色
        properties.setProperty("kaptcha.background.clear.to", "255,255,255"); // 背景结束色

        // 4. 初始化配置
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
        return captchaProducer;
    }
}